[android] MediaRecorder prepare() causes segfault

Posted by dwilde1 on Stack Overflow See other posts from Stack Overflow or by dwilde1
Published on 2010-03-30T10:08:22Z Indexed on 2010/03/30 16:33 UTC
Read the original article Hit count: 738

Filed under:
|

Folks,

I have a situation where my MediaRecorder instance causes a segfault. I'm working with a HTC Hero, Android 1.5+APIs. I've tried all variations, including 3gpp and H.263 and reducing the video resolution to 320x240. What am I missing? The state machine causes 4 MediaPlayer beeps and then turns on the video camera. Here's the pertinent source:

UPDATE: ADDING SURFACE CREATE INFO I have rebooted the device based on previous answer to similar question.

UPDATE 2: I seem to be following the MediaRecorder state machine perfectly, and if I trap out the MR code, the blank surface displays perfectly and everything else functions perfectly. I can record videos manually and play back via MediaPlayer in my code, so there should be nothing wrong with the underlying code. I've copied sample code on the surface and surfaceHolder code. I've looked at the MR instance in the Debug perspective in Eclipse and see that all (known) variables seem to be instantiated correctly. The setter calls are all now implemented in the exaxct order specced in the state diagram.


 // in activity class definition   
    protected           MediaPlayer mPlayer;
    protected           MediaRecorder mRecorder;
    protected           boolean  inCapture = false;
    protected           int phaseCapture = 0;
    protected           int durCapturePhase = INF;
    protected           SurfaceView     surface;        
    protected           SurfaceHolder   surfaceHolder; 

// in onCreate()
// panelPreview is an empty LinearLayout

    surface = new SurfaceView(getApplicationContext()); 
    surfaceHolder = surface.getHolder();
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    panelPreview.addView(surface);

// in timer handler runnable

    if (mRecorder == null) mRecorder = new MediaRecorder();        
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                    
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);  
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mRecorder.setOutputFile(path + "/" + vlip);
    mRecorder.setVideoSize(320, 240);   
    mRecorder.setVideoFrameRate(15);
    mRecorder.setPreviewDisplay(surfaceHolder.getSurface());
    panelPreview.setVisibility(LinearLayout.VISIBLE);

     mRecorder.prepare();
     mRecorder.start();

Here is a complete log trace for the process run and crash:

I/ActivityManager(   80): Start proc com.ejf.convince.jenplus for
activity com.ejf.convince.jenplus/.JenPLUS: pid=17738 uid=10075
gids={1006, 3003}
I/jdwp    (17738): received file descriptor 10 from ADB
W/System.err(17738): Can't dispatch DDM chunk 46454154: no handler
defined
W/System.err(17738): Can't dispatch DDM chunk 4d505251: no handler
defined
I/WindowManager(   80): Screen status=true, current orientation=-1,
SensorEnabled=false
I/WindowManager(   80): needSensorRunningLp, mCurrentAppOrientation
=-1
I/WindowManager(   80): Enabling listeners
W/ActivityThread(17738): Application com.ejf.convince.jenplus is
waiting for the debugger on port 8100...
I/System.out(17738): Sending WAIT chunk
I/dalvikvm(17738): Debugger is active
I/AlertDialog(   80): [onCreate] auto launch SIP.
I/WindowManager(   80): onOrientationChanged, rotation changed to 0
I/System.out(17738): Debugger has connected
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): waiting for debugger to settle...
I/System.out(17738): debugger has settled (1370)
I/ActivityManager(   80): Displayed activity
com.ejf.convince.jenplus/.JenPLUS: 5186 ms
I/OpenCore( 2696): [Hank debug] LN 289 FN CreateNode
I/AudioHardwareMSM72XX( 2696): AUDIO_START: start kernel pcm_out
driver.
W/AudioFlinger( 2696): write blocked for 96 msecs
I/PlayerDriver( 2696): CIQ 1625 sendEvent state=5
I/OpenCore( 2696): [Hank debug] LN 289 FN CreateNode
I/PlayerDriver( 2696): CIQ 1625 sendEvent state=5
I/OpenCore( 2696): [Hank debug] LN 289 FN CreateNode
I/PlayerDriver( 2696): CIQ 1625 sendEvent state=5
I/OpenCore( 2696): [Hank debug] LN 289 FN CreateNode
I/PlayerDriver( 2696): CIQ 1625 sendEvent state=5
W/AuthorDriver( 2696): Intended width(640) exceeds the max allowed
width(352). Max width is used instead.
W/AuthorDriver( 2696): Intended height(480) exceeds the max allowed
height(288). Max height is used instead.
I/AudioHardwareMSM72XX( 2696): AudioHardware pcm playback is going to
standby.
I/DEBUG   (16094): *** *** *** *** *** *** *** *** *** *** *** *** ***
*** *** ***
I/DEBUG   (16094): Build fingerprint: 'sprint/htc_heroc/heroc/heroc:
1.5/CUPCAKE/85027:user/release-keys'
I/DEBUG   (16094): pid: 17738, tid: 17738  >>>
com.ejf.convince.jenplus 

Thanks in advance!

-- Don Wilde
http://www.ConvinceProject.com

© Stack Overflow or respective owner

Related posts about android

Related posts about video-capture